#include <stdio.h>
#include <stdlib.h>

int g_val1 = 100;
int g_val2;

//int main()
//{
//    //数据区中有堆区，栈区，未初始化全局数据区，已初始化全局数据区，常量区，代码区
//    const char* str = "hello";
//    printf("constant addr:%p\n", str);
//    printf("code addr:%p\n", main);
//   int a = 0, b = 1;
//   printf("stack addr:%p\n", &a);
//   printf("stack addr:%p\n", &b);
//   int* p1 = (int*)malloc(100);
//   int* p2 = (int*)malloc(100);
//   printf("heap addr:%p\n", p1);
//   printf("heap addr:%p\n", p2);
//   printf("init global addr:%p\n", &g_val1);
//   printf("no_init global addr:%p\n", &g_val2);
//
//    return 0;
//}

#include <unistd.h>
int main()
{
    pid_t id = fork();
    if(id)
    {
        while(1)
        {
            sleep(1);
            printf("I'm parent fork, my pid:%d, my ppid:%d, g_val:%d, g_val addr:%p\n", getpid(), getppid(), g_val1, &g_val1);
        }
    }
    else{
        int cnt = 5;
        while(1)
        {
            sleep(1);
            printf("I'm chile fork, my pid:%d, my ppid:%d, g_val:%d, g_val addr:%p\n", getpid(), getppid(), g_val1, &g_val1);
           while(cnt-- == 0)
               g_val1 = 200;
        }
    }
    return 0;
}
